<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use GuzzleHttp\Client;
use App\Models\Rentings;

class LoginController extends Controller
{
    //登录操作
    public function login(Request $request){
        //表单验证
        //异常捕获
        try{
            $this->validate($request, [
                'username' => 'required',
                'password' => 'required'
            ]);
        }catch(\Exception $e){
            return response()->json(['status'=>1001,'msg'=>'账号或者密码不能为空'],400);
        };
        //查看对象中可用的方法
    //    dump(get_class_methods(auth()->guard('apiweb')));
        // dump($request->all());
        $bool = auth()->guard('apiweb')->attempt($request->all());
        //账号登录成功
        if($bool){
            //生成token
//             dump(auth()->guard('apiweb')->user());
            //得到用户模型
            $userModel = auth()->guard('apiweb')->user();
            
            /*每天请求登录的次数不能超过2000次，超过2000次就涉嫌异常
                                  * 此种方法也能够解决问题，但是这里有并发问题，同时有几个人在登录的时候，就会记录不准确，所以使用mysql自带的 update bd_api_users set click = click+1来操作
                                  * 因为数据库会自动识别当前的任务个数，并且一个一个执行
             *$click = $userModel->click + 1;
             * $userModel->update(['click'=>$click]);
             */
            if($userModel->click >= env('CLICK_NUM')){
                   return response()->json(['status'=>1002,'msg'=>'今天的请求次数已上限'],402);
            }
            //给当前的数据库字段加1
            $userModel->increment('click',1);
    
            //生成token,一份保存在服务器端，一份返回客户端
            $token = $userModel->createToken('api')->accessToken;
            $data = [
                'expire' => 7200,
                'token' => $token
            ];
            return response()->json($data);

        }else{
            return response()->json(['status'=>1001,'msg'=>'账号或者密码不正确'],401);
        }
    }
    
    
    
    //小程序登录
    public function wxlogin(Request $request){
        $appid = 'wxaa30f0a1ee0e52f3';
        $appsecret = 'e8d5c0c0c4d370345697485b89bea140';
        $code = $request->post('code');
        $url = 'https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code';
        $url = sprintf($url,$appid,$appsecret,$code);
        //进行url内容的获取  verify不进行证书验证
        $client = new Client([
            'timeout' => 5,
            'verify' => false
        ]);
        $response = $client->get($url);
        $res = (string)$response->getBody();
        //得到数据之后，对数据进行入库操作  ,这里对openid使用唯一索引的方式插入    使用索引会使得查询效率更高
        $arr = json_decode($res,true);
        //因为这边的openid使用的是唯一索引，所以在用户表中只能有一个openid并且是唯一的，再次添加相同的数据的话，就会报错
        try {
            Rentings::create(['openid'=>$arr['openid']]);
        }catch (\Exception $e){
            
        }
        return $arr;
    }
    
    
    
    
    
    
    
    
    
    
    
    
}
